//package org.example.demo1startjava17.download.hDemo;
//
//import cn.hutool.core.util.URLUtil;
//
//
//import com.alibaba.excel.ExcelWriter;
//import com.alibaba.excel.EasyExcelFactory;
//import com.alibaba.excel.write.metadata.WriteSheet;
//import com.alibaba.excel.write.metadata.WriteTable;
//import jakarta.servlet.ServletOutputStream;
//import jakarta.servlet.http.HttpServletResponse;
//import lombok.extern.slf4j.Slf4j;
//
//import java.io.IOException;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Objects;
//
//@Slf4j
//public class Demo {
//
//    private void down(String result, String time, String scheduleDate, String fileName) {
//        HttpServletResponse response = ProjectUtil.obtainHttpServletResponse();
//        response.setContentType("application/force-download");// 设置强制下载不打开
//        response.setHeader("Content-Disposition", "attachment;filename=" + URLUtil.encode(fileName));
//        ServletOutputStream outputStream;
//        try {
//            outputStream = response.getOutputStream();
//        } catch (IOException e) {
//            log.error(e.getMessage(), e);
//            throw ApiException.get(e);
//        }
//        ExcelWriter writer = EasyExcelFactory.write(outputStream).build();
//        try {
//            // 动态添加表头，适用一些表头动态变化的场景
//            WriteSheet sheet1 = new WriteSheet();
//            // todo
//            sheet1.setSheetName("sheet名称自己改");
//            sheet1.setSheetNo(0);
//            // 创建一个表格，用于 Sheet 中使用
//            WriteTable table = new WriteTable();
//            table.setTableNo(1);
//            // 配置表头
//            table.setHead(this.head());
//            // 获取excel导出使用的原始数据 OdsProOccupyPrintViewVo
//            // todo dto入参同view接口
//            OdsProOccupyPrintViewDto dto = new OdsProOccupyPrintViewDto();
//            // 设置该字段，如果是导出，则view方法不保存数据
//            dto.setIsExcel("");
//            OdsProOccupyPrintViewVo view = this.view(dto);
//            // 获取excel导出使用的数据
//            List<List<String>> data = this.contentData(view);
//            // 写入excel
//            writer.write(data, sheet1, table);
//            // 合并单元格
//            this.mergeExcelCell(dto.getHasOrder(), view, writer);
//        } finally {
//            writer.finish();
//            IoUtil.close(outputStream);
//        }
//    }
//
//    private List<List<String>> head() {
//        List<List<String>> list = new ArrayList<>();
//        // todo 表头是否全
//        list.add(Arrays.asList("单号", "车次号", "是否备货", "单据状态", "配送中心", "物料号", "物料描述", "需求数", "库位", "分配数", "方量m3", "长宽高(mm)"));
//        return list;
//    }
//
//    private List<List<String>> contentData(OdsProOccupyPrintViewVo view) {
//        List<List<String>> excelDataList = new ArrayList<>();
//        for (int i = 0; i < view.getProductInfos().size(); i++) {
//            List<String> oneLineDataList = new ArrayList<>();
//            OdsProOccupyPrintViewVo.ProductInfo productInfo = view.getProductInfos().get(i);
//            // 单号
//            oneLineDataList.add(productInfo.getOrderNo());
//            // 车次号
//            oneLineDataList.add(productInfo.getMergeNo());
//            // todo 是否备货
//            oneLineDataList.add(productInfo.getPreFlag());
//            // 单据状态
//            oneLineDataList.add(productInfo.getDjStatus());
//            // todo 配送中心
//            oneLineDataList.add(productInfo.getCpRef7());
//            // 物料号
//            oneLineDataList.add(productInfo.getProductCode());
//            // 物料描述
//            oneLineDataList.add(productInfo.getProductDesc());
//            // todo 需求数
//            oneLineDataList.add(productInfo.getProductDesc());
//            // "库位", "分配数", "方量m3", "长宽高(mm)"
//            // todo 其它字段继续添加到 oneLineDataList
//        }
//        return excelDataList;
//    }
//
//    private void mergeExcelCell(Boolean hasOrder, OdsProOccupyPrintViewVo view, ExcelWriter writer) {
//        if (!hasOrder) {
//            // todo false的逻辑待定
//            return;
//        }
//        // writer.merge() 方法，行号列号从0开始，本次excel排除表头1行
//        String theFormerOrderNo = null;
//        List<OdsProOccupyPrintViewVo.ProductInfo> productInfos = view.getProductInfos();
//        for (int i = 0; i < productInfos.size(); i++) {
//            OdsProOccupyPrintViewVo.ProductInfo productInfo = productInfos.get(i);
//            String orderNo = productInfo.getOrderNo();
//            Integer orderRowSpan = productInfo.getOrderRowSpan();
//            if (orderRowSpan == null || orderRowSpan == 1) {
//                // 只有一行，不需要合并
//                continue;
//            }
//            if (Objects.equals(theFormerOrderNo, orderNo)) {
//                // 本行orderNo与上一行orderNo相同，不需要合并
//                continue;
//            }
//            // 5是因为从页面来看需要合并的是前5列数据
//            for (int i1 = 0; i1 < 5; i1++) {
//                // 从当前行（1 + i）向下数（orderRowSpan - 1）行需要合并
//                writer.merge(1 + i, 1 + i + orderRowSpan - 1, i1, i1);
//            }
//            theFormerOrderNo = orderNo;
//        }
//    }
//
//}
